iT邦幫忙

2023 iThome 鐵人賽

DAY 23
0
Mobile Development

swift 30天之旅系列 第 23

第二十三天:UserDefaults

  • 分享至 

  • xImage
  •  

在開發iOS應用時,我們經常需要保存輕量級的、持久的數據,例如用戶的偏好設置或一些輕量的應用狀態信息。UserDefaults是Apple提供的一個簡單而方便的方式來保存這些數據。在這一章中,我們將使用UserPreferences單例模式來對UserDefaults進行封裝,讓它在整個應用中更易於管理和使用。

UserDefaults簡介

UserDefaults是一個保存簡單數據結構的介面,例如字串、數字、日期、數組和字典。但它不適用於保存複雜的數據結構或大量的數據。

UserPreferences單例模式封裝

為了更有效地使用UserDefaults,我們可以使用單例模式創建一個UserPreferences類來封裝其功能:

class UserPreferences {
    static let shared = UserPreferences()
    private let defaults = UserDefaults.standard

    private init() {}

    var userName: String? {
        get {
            return defaults.string(forKey: "userName")
        }
        set {
            defaults.set(newValue, forKey: "userName")
        }
    }

    var isLoggedIn: Bool {
        get {
            return defaults.bool(forKey: "isLoggedIn")
        }
        set {
            defaults.set(newValue, forKey: "isLoggedIn")
        }
    }

    // ... 可以繼續添加其他的偏好設置...
}

這裡,我們定義了UserPreferences類並將其初始化方法設置為私有,以確保只有一個實例被創建。然後,我們提供了一些讀取和寫入偏好設置的屬性。

使用此封裝,保存和讀取數據變得非常簡單:

UserPreferences.shared.userName = "JohnDoe"
print(UserPreferences.shared.userName) // Output: "JohnDoe"

UserPreferences.shared.isLoggedIn = true
print(UserPreferences.shared.isLoggedIn) // Output: true

進階功能

數據遷移

在某些情况下,你可能需要遷移存储在UserDefaults中的舊數據到新的鍵值。可以使用UserPreferences類很容易地完成:

func migrate() {
    if let oldUsername = defaults.string(forKey: "oldUserNameKey") {
        self.userName = oldUsername
        defaults.removeObject(forKey: "oldUserNameKey")
    }
}

監聽偏好設置的更改

你可以使用NotificationCenter來監聽UserDefaults中的數據更改:

NotificationCenter.default.addObserver(self, selector: #selector(handleDefaultsChanged), name: UserDefaults.didChangeNotification, object: nil)

@objc private func handleDefaultsChanged() {
    // Handle changes
}

這使得在偏好設置更改時可以執行特定的操作,例如更新UI或通知其他部分的應用程序。

注意事項

雖然UserDefaults非常方便,但有一些事情需要注意:

  1. 性能:不應該使用UserDefaults來存儲大量數據。
  2. 數據安全UserDefaults中的數據不是加密的,因此不應存儲敏感資訊。

結論

UserDefaults提供了一個簡單方便的方式來存儲和獲取輕量級的、持久的應用數據。透過UserPreferences的單例模式封裝,我們可以更有效地在整個應用中管理和使用這些數據。不過,始終要記住UserDefaults的適用場景,並確保不要用它來存儲大量或敏感的數據。


上一篇
第二十二天:網絡
下一篇
第二十四天:Core Data
系列文
swift 30天之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言